/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import exceptions.ExceptionEvento;
import exceptions.ExceptionPersona;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import persistencia.Persistencia;

/**
 *
 * @author diego
 */
public class Admin {
    private Integer id;
    private String descripcion;
    private Set<Evento> eventos;
    private Map<String,Persona> personas;
    private Set<Provincia> provincias;
    public final static Persistencia persistencia = new Persistencia();
    public Admin() {
    }

    public Admin(String descripcion) {
        this.descripcion = descripcion;
        this.eventos = new HashSet();
        this.provincias = new HashSet();
        this.personas = new HashMap();  
        Admin.persistencia.insert(this);
        
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Set<Evento> getEventos() {
        return eventos;
    }

    public void setEventos(Set<Evento> eventos) {
        this.eventos = eventos;
    }

    public Map<String, Persona> getPersonas() {
        return personas;
    }

    public void setPersonas(Map<String, Persona> personas) {
        this.personas = personas;
    }

    public Set<Provincia> getProvincias() {
        return provincias;
    }

    public void setProvincias(Set<Provincia> provincias) {
        this.provincias = provincias;
    }
    
    
    public void agregarPersona(String nombre, String apellido, String dni, String email, String telefono, String celular, String direccion,Date fechaNacimiento, Localidad unaLocalidad, String organizacion, boolean estudiante, boolean afialiado, String observaciones) throws ExceptionPersona{
        if(this.personas.containsKey(dni)){
            throw new ExceptionPersona("Dni Existente");
        }
        Persona unaPersona = new Persona(nombre, apellido, dni, email, telefono, celular, direccion,fechaNacimiento, unaLocalidad, organizacion, estudiante, afialiado, observaciones);
        this.personas.put(dni, unaPersona);
    }
    public void agregarProvincia(String nombre){
        Provincia unaProvincia = new Provincia(nombre);
        this.provincias.add(unaProvincia);   
        Admin.persistencia.update(this);
    }
    public void agregarEvento(Date fecha,Date fechaCierre, String nombre, Integer cupo, boolean valoracion,String codigo, Area unAreaResponsable){
        Evento unEvento = new Evento(fecha,fechaCierre, nombre, cupo, valoracion,codigo,unAreaResponsable);
        this.eventos.add(unEvento);
    }
    
    public String Inscribir(Persona unaPersona,Evento unEvento) throws ExceptionEvento{
        String unCodigo = unEvento.inscribir(unaPersona);
        unaPersona.agregarEvento(unEvento);
        return unCodigo;
    }
    
    public Set<Localidad> obtenerLocalidades(){
        Set<Localidad> localidades= new HashSet();
        Iterator it = this.getProvincias().iterator();
        while(it.hasNext()){
            Provincia unaProvincia = (Provincia) it.next();
            localidades.addAll(unaProvincia.getLocalidades());
        }
        
        return localidades; 
        
    }
    
    
}
